/*
 * IO.cpp
 *
 *  Created on: 24/10/2013
 *      Author: mespinozas
 */
#include "IO.h"

bool IO::CargarBase( const char* _file , set < int >** _cargar)
{
	bool resultado=false;
	//map< int,set<int> > base;
	ifstream fin;
	fin.open( _file );
	if( !fin.is_open( ) )
	{
		cout << "ERROR: no se pudo abrir archivo de base de datos:" << _file << endl;
		exit( -1 );
	}

	string line;
	int linenumber=0;
	while( getline( fin, line ) )
	{
		//imprimir bases de datos
		cout << "Base " << line << endl;
		
		stringstream tmp( line );
		set<int> elementos;
		while( tmp.good( ) )
		{
			string t;
			tmp >> t;
			//cout << "token=" << atoi( t.c_str( ) ) << endl;
			//_cargar[linenumber].insert(atoi( t.c_str( ) ));
		}
		//&_cargar[linenumber]=elementos;
		linenumber++;
	}
	
	/*Revisar Impresion
	for( map< int,set<int> >::iterator iter = _cargar.begin( ); iter != base.end( );iter++ )
	{
		cout << "Linea=" << (*iter).first << " elems:";
		set<int> temp = (*iter).second;
			
		for(set<int>::iterator iter = temp.begin();iter !=temp.end();iter++)
		{
			cout <<  *iter << " ";
		}
		cout<<endl;
	}*/
	return true;
/*
  string token;
  while( !fin.eof( ) )
  {
    fin >> token;
    cout << "token=" << token << endl;
  }
*/
}

map< int,set<int> > IO::CargarConsultas( const char* _file )
{
	//map< int,set<int> > consultas;
	ifstream fin;
	fin.open( _file );
	if( !fin.is_open( ) )
	{
		cout << "ERROR: no se pudo abrir archivo de consultas:" << _file << endl;
		exit( -1 );
	}

	string line;
	int linenumber=0;
	while( getline( fin, line ) )
	{
		//revisar bases de datos
		//cout << "consulta=" << line << endl;
		stringstream tmp( line );
		set<int> archivos;

		while( tmp.good( ) )
		{
			string t;
			tmp >> t;
			//cout << "token=" << atoi( t.c_str( ) ) << endl;
			archivos.insert(atoi( t.c_str( ) ));
		}
		consultas[linenumber]=archivos;
		linenumber++;
	}
	
	/*Revisar Impresion
	for( map< int,set<int> >::iterator iter = consultas.begin( ); iter != consultas.end( );iter++ )
	{
		cout << "Consulta=" << (*iter).first << " archivos:";
		set<int> temp = (*iter).second;
		
		for(set<int>::iterator iter = temp.begin();iter !=temp.end();iter++)
		{
			cout <<  *iter << " ";
		}
		cout<<endl;
	}*/
	return consultas;
}

void IO::EscribirSalida(const char *filename, map< int, set<int> > salida)
{
	ofstream fout (filename);
	if (fout.is_open())
	{
		string s ="";
		for( map< int,set<int> >::iterator iter = salida.begin( ); iter != salida.end( );iter++ )
		{
			
			cout << "Consulta=" << (*iter).first << " archivos:";
			set<int> temp = (*iter).second;
			
			for(set<int>::iterator iter = temp.begin();iter !=temp.end();iter++)
			{
				fout << *iter << " ";
			}
			
			fout << endl;
		}
		fout.close();
	}
	else cout << "Unable to open file";
	
	
}

bool IO::ImprimirResultado( const char *filename)
{
	bool validarResultado = false;
	
	if(validarResultado)
	{

	}
	else
		printf("/n");
	return validarResultado;
}

bool IO::LecturaArchivo(const char *filename )
{
	bool resultado = false;
	ifstream fin;
	fin.open(filename);
	string line;
	
	while(getline(fin,line))
	{

	}

	return resultado;
}
